/*
 * To change this template, choose Tools | Templates
 * and open the template in the editor.
 */
package funkcje.bankowe;

import Obsluga.Dzialanie;
import POJO.Konto;
import POJO.Osoba;
import java.util.Date;
import java.util.Set;
import java.util.Vector;

/**
 * Klasa bankiera dokonująca głownych funkcji zarządzania programem
 * @author Justyna Heinbockel i Barłomiej Ziobrowski
 */
public class bankier {

    Vector<Osoba> klienci;

    public bankier() {
        this.lista_uzytkownikow();
    }
    
    /**
     * Dodaje klienta wszystkie parametry są wymagane
     * @param imie 
     * @param nazwisko
     * @param adres1
     * @param adres2
     * @param data_urodzenia
     * @param pesel
     * @param imie_ojca
     * @param imie_matki
     * @param nazwisko_panienskie_matki 
     */
    public void dodaj_klienta(String imie,String nazwisko, String adres1,String adres2,Date data_urodzenia,String pesel,String imie_ojca,String imie_matki,String nazwisko_panienskie_matki){
        //Dzialanie.dodajKlienta(2, pesel, imie, nazwisko, data_urodzenia, imie, imie_matki, imie_ojca);
        long id=3;
        boolean czy=true;
        while(czy){
        if(Dzialanie.czyIdDostepne(id)){
        SyntaxExpert se=new SyntaxExpert();
        if(se.czyNazwa(imie) && se.czyNazwa(nazwisko) && se.czyNazwa(imie_ojca) && se.czyNazwa(imie_matki) && se.czyPesel(pesel)){
        Dzialanie.dodajKlienta(id, pesel, imie, nazwisko, data_urodzenia, imie_ojca, imie_matki, nazwisko_panienskie_matki);
        
        }
        czy=false;
        }else{
        id++;
        }}

    }
    /**
     * Usuwa klienta po jego numerze.
     * @param numer_klienta 
     */
    public void usun_klienta(long numer_klienta){
        //Dzialanie.usun_klienta(numer_klienta)
    }
    /**
     * Wyswietla dane na podstawie podanego nru użytkownika
     * @param uzytkownik 
     */
    public void wyswietl_dane_uzytkownika(int numer){
        
        System.out.println(klienci.elementAt(numer).getDataUrodzenia());
        System.out.println(klienci.elementAt(numer).getHaslo());
        System.out.println(klienci.elementAt(numer).getIdentyfikator());
        System.out.println(klienci.elementAt(numer).getImie());
        System.out.println(klienci.elementAt(numer).getKodPocztowy());
        System.out.println(klienci.elementAt(numer).getMiejscowosc());
        System.out.println(klienci.elementAt(numer).getNazwisko());
        System.out.println(klienci.elementAt(numer).getUl());
        Set<Konto> k;
        k=klienci.elementAt(numer).getKonta();
        for(Konto ko : k){
        System.out.println(ko.getNrRachunku()+" "+ko.getStanKonta()+ " "+ ko.getWlasciciel().getNazwisko());
        }
        
        
    }
    /**
     * Zmienia dane użytkownika, jeżeli wprowadzana dana ma wartość 0 nie jest zmieniana
     * Wszystko różne od wartości 0 jest nadpisywane.
     * @param numer_klienta
     * @param imie
     * @param nazwisko
     * @param adres1
     * @param adres2
     * @param data_urodzenia
     * @param pesel
     * @param numer_dowodu
     * @param imie_ojca
     * @param imie_matki
     * @param nazwisko_panienskie_matki 
     */
    public void zmien_Adres(long idKlienta,String ulica,String kodPocztowy, String miejscowosc ){
    Dzialanie.zmienAdres(idKlienta, ulica, kodPocztowy, miejscowosc);
    }
    
   /**
     * Tworzy konto i Typ bankier nie może stworzyć typu administrator
     * @param numer_uzytkownika
     * @param typ_konta 
     */
    public void utworz_konto(long id_uzytkownika, String nrRachunku,double stan){
        Dzialanie.dodajKonto(id_uzytkownika, nrRachunku, stan);
    }
    public void utworz_konto_osobie(Osoba osoba, String nrRachunku, double stan){
        Dzialanie.dodajKonto(osoba.getIdentyfikator(),nrRachunku,stan);
    }
    /**
     * Usuwa konto po numerze konta
     * @param numer_konto 
     */
    public void usun_konto(String numer_konto){} 
    /**
     * Zmienia dane konta w zależności od oprocentowania i okresu kapitalizacji
     * @param numer_konta
     * @param oprocentowanie
     * @param okres_kapitalizacji 
     */
    public void zmien_dane_konta(String numer_konta, float oprocentowanie, int okres_kapitalizacji){} 
    /**
     * Zmienia oprocentowanie na wszystkich kontach.
     * @param typ_konta
     * @param oprocentowanie
     * @param kapitalizacja 
     */
    public void zmien_globalne_dane_kont(int typ_konta, float oprocentowanie, int kapitalizacja){} 
    /**
     * Udziela kredytu na podstawie numeru użytkownika i kwoty (tworzy nową klasę pożyczka i przypisuje ją do konta)
     * @param numer_uzytkownika
     * @param kwota 
     */
    public void udziel_kredytu(String numer_uzytkownika, float kwota, Date czas) {}
    /**
     * Wypłata z danego nru konta
     * @param numer_konta
     * @param kwota 
     */
    public void wplata(String numer_konta, float kwota) {}
    /**
     * Wpłata na dany numer konta z określeniem kiedy to zostało zrobione
     * @param numer_konta
     * @param kwota
     * @param czas 
     */
    public void wyplata(String numer_konta, float kwota, Date czas){}
    public void wyswietl_wszystkich_uzytkownikow(){
        for(Osoba os : this.klienci){
       System.out.println(os.getIdentyfikator()+" "+os.getImie()+" "+os.getNazwisko());
       }

    }
    /**
     * Wyświetlanie całej listy użytkowników przypisanej do banku
     */
    public void lista_uzytkownikow() {
        Vector<Osoba> klienci = new Vector<Osoba>();
        Osoba b=Dzialanie.wczytajOsobe(0);
        klienci.addElement(b);
        b=Dzialanie.wczytajOsobe(1);
        klienci.addElement(b);
        b=Dzialanie.wczytajOsobe(2);
        klienci.addElement(b);
        long id=3;
        boolean czy=true;
        while(czy){
        //
        Osoba o=Dzialanie.wczytajOsobe(id);
        klienci.addElement(o);
        
        id++;
        //}else{
        //czy=false;    
        if(Dzialanie.czyIdDostepne(id)){
            czy=false;
        }
        }

        //}
       this.klienci=new Vector<Osoba>();
       this.klienci.addAll(klienci);
    }
    /**
     * Szukanie klientów po parametrze, parametr zostaje pomijany jeśli wynosi wartość 0
     * @param imie
     * @param nazwisko
     * @param id 
     */
    public void szukaj_klientow(String imie, String nazwisko, String id) {}    
}
